From 369754a8f680f0e84f2cb0a7070d98b6e01be09b Mon Sep 17 00:00:00 2001 From: "smh22@firebug.cl.cam.ac.uk" Date: Fri, 2 Dec 2005 09:54:09 +0100 Subject: [PATCH] More fixes for live migrate on PAE and 64-bit. Signed-off-by: Jun Nakajima Signed-off-by: Steven Hand --- xen/arch/x86/shadow.c | 11 ++++++----- xen/arch/x86/shadow_public.c | 8 ++++---- xen/include/asm-x86/shadow.h | 8 ++++---- 3 files changed, 14 insertions(+), 13 deletions(-) diff --git a/xen/arch/x86/shadow.c b/xen/arch/x86/shadow.c index 0663d16f6d..d19f2fec78 100644 --- a/xen/arch/x86/shadow.c +++ b/xen/arch/x86/shadow.c @@ -2750,10 +2750,10 @@ static unsigned long shadow_l3_table( g2mfn, g2mfn); BUG(); /* XXX Deal gracefully with failure. */ } - - if (!get_shadow_ref(s2mfn)) - BUG(); } + + if (!get_shadow_ref(s2mfn)) + BUG(); /* Map shadow L2 into shadow L3 */ spl3e[L3_PAGETABLE_ENTRIES - 1] = l3e_from_pfn(s2mfn, _PAGE_PRESENT); @@ -3526,10 +3526,11 @@ static void shadow_invlpg_64(struct vcpu *v, unsigned long va) shadow_lock(d); + __shadow_sync_va(v, va); + if ( __shadow_get_l1e(v, va, &old_sl1e) ) if ( l1e_get_flags(old_sl1e) & _PAGE_PRESENT ) - put_page_from_l1e(old_sl1e, d); - + shadow_put_page_from_l1e(old_sl1e, d); sl1e = l1e_empty(); __shadow_set_l1e(v, va, &sl1e); diff --git a/xen/arch/x86/shadow_public.c b/xen/arch/x86/shadow_public.c index 10b40f294b..70dd30abcd 100644 --- a/xen/arch/x86/shadow_public.c +++ b/xen/arch/x86/shadow_public.c @@ -1425,7 +1425,7 @@ alloc_p2m_table(struct domain *d) void shadow_l1_normal_pt_update( struct domain *d, - unsigned long pa, l1_pgentry_t gpte, + physaddr_t pa, l1_pgentry_t gpte, struct domain_mmap_cache *cache) { unsigned long sl1mfn; @@ -1450,7 +1450,7 @@ void shadow_l1_normal_pt_update( void shadow_l2_normal_pt_update( struct domain *d, - unsigned long pa, l2_pgentry_t gpde, + physaddr_t pa, l2_pgentry_t gpde, struct domain_mmap_cache *cache) { unsigned long sl2mfn; @@ -1475,7 +1475,7 @@ void shadow_l2_normal_pt_update( #if CONFIG_PAGING_LEVELS >= 3 void shadow_l3_normal_pt_update( struct domain *d, - unsigned long pa, l3_pgentry_t l3e, + physaddr_t pa, l3_pgentry_t l3e, struct domain_mmap_cache *cache) { unsigned long sl3mfn; @@ -1502,7 +1502,7 @@ void shadow_l3_normal_pt_update( #if CONFIG_PAGING_LEVELS >= 4 void shadow_l4_normal_pt_update( struct domain *d, - unsigned long pa, l4_pgentry_t l4e, + physaddr_t pa, l4_pgentry_t l4e, struct domain_mmap_cache *cache) { unsigned long sl4mfn; diff --git a/xen/include/asm-x86/shadow.h b/xen/include/asm-x86/shadow.h index fa1488cc06..b0c24dd895 100644 --- a/xen/include/asm-x86/shadow.h +++ b/xen/include/asm-x86/shadow.h @@ -131,10 +131,10 @@ extern int set_p2m_entry( extern void remove_shadow(struct domain *d, unsigned long gpfn, u32 stype); extern void shadow_l1_normal_pt_update(struct domain *d, - unsigned long pa, l1_pgentry_t l1e, + physaddr_t pa, l1_pgentry_t l1e, struct domain_mmap_cache *cache); extern void shadow_l2_normal_pt_update(struct domain *d, - unsigned long pa, l2_pgentry_t l2e, + physaddr_t pa, l2_pgentry_t l2e, struct domain_mmap_cache *cache); #if CONFIG_PAGING_LEVELS >= 3 #include @@ -148,12 +148,12 @@ extern void shadow_l2_normal_pt_update(struct domain *d, extern unsigned long gva_to_gpa(unsigned long gva); extern void shadow_l3_normal_pt_update(struct domain *d, - unsigned long pa, l3_pgentry_t l3e, + physaddr_t pa, l3_pgentry_t l3e, struct domain_mmap_cache *cache); #endif #if CONFIG_PAGING_LEVELS >= 4 extern void shadow_l4_normal_pt_update(struct domain *d, - unsigned long pa, l4_pgentry_t l4e, + physaddr_t pa, l4_pgentry_t l4e, struct domain_mmap_cache *cache); #endif extern int shadow_do_update_va_mapping(unsigned long va, -- 2.30.2